package com.sena.engine.snmp.mib;

import com.sena.engine.common.enums.ResultCodeEnum;
import com.sena.engine.enums.SnmpResultCodeEnum;
import com.sena.engine.snmp.config.SnmpSysConfig;
import com.sena.engine.snmp.exception.SenaSnmpRunTimeException;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import net.percederberg.mibble.MibLoader;

import java.io.File;


/**
 * @author seven
 * @create 2021-11-24 20:04
 **/
@Slf4j
public class MibLoaderBuilder {

    private volatile static MibLoader mibloader;

    /**
     * 单例的mibloader
     *
     * @return
     */
    public static MibLoader getMibloader() {
        if (mibloader == null) {
            synchronized (MibLoaderBuilder.class) {
                if (mibloader == null) {
                    init();
                }
            }
        }
        return mibloader;
    }

    /**
     * 初始化
     */
    public static void init() {
        try {
            if (mibloader == null) {
                mibloader = new MibLoader();
                mibloader.addResourceDir(SnmpSysConfig.MIB_PATH);
                log.info("SNMP网关模块开始初始化！");
                log.info("请确保MIB文件放置在classpath中的mibs文件夹中");
                mibloader.load("RFC1213-MIB");
                mibloader.load("HOST-RESOURCES-MIB");
                mibloader.load("BRIDGE-MIB");
                mibloader.load("IF-MIB.mib");
                mibloader.load("LLDP.mib");
                mibloader.load("Q-BRIDGE-MIB");
                mibloader.load("OSPF-MIB");
                mibloader.load("ENTITY-MIB");
                mibloader.load("SNMPv2-CONF");
                mibloader.load("SNMPv2-TC");
                mibloader.load("SNMPv2-SMI");
//                mibloader.load("HCNUM-TC.mib");
//                mibloader.load("HUAWEI-MIB.mib");
//                mibloader.load("HUAWEI-TC-MIB.mib");
//                mibloader.load("HUAWEI-DEVICE-MIB.mib");
//                mibloader.load("HUAWEI-ENTITY-EXTENT-MIB.mib");
//                mibloader.load("HUAWEI-MEMORY-MIB.mib");
//                mibloader.load("HUAWEI-CPU-MIB.mib");
//                mibloader.load("CISCO-SMI");
//                mibloader.load("CISCO-CDP-MIB");
//                mibloader.load("CISCO-QOS-PIB-MIB.my");
//                mibloader.load("CISCO-ENVMON-MIB.my");
//                mibloader.load("CISCO-PROCESS-MIB.my");
//                mibloader.load("CISCO-MEMORY-POOL-MIB.my");
                log.info("加载默认的加载mib文件成成功！");
                log.info("初始化SNMP模块成功!");
            }
        } catch (Exception e) {
            log.error("初始化SNMP模块出错:," + e.getMessage());
            log.error(e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 动态加载mib文件
     *
     * @param mibFile mib文件在项目中的路径
     * @throws SenaSnmpRunTimeException
     */
    public static void loadMib(String mibFile)  {
        try {
            File file = new File(mibFile);
            getMibloader().addDir(file.getParentFile());
            getMibloader().load(file);
            log.info("加载mib文件成功");
        } catch (Exception e) {
            e.printStackTrace();
            log.info("加载mib文件失败:{}",e.getMessage());
            throw new SenaSnmpRunTimeException(SnmpResultCodeEnum.SNMP_LOAD_MIB_ERROR);
        }
    }

}
